package com.example.context;

/**
 * 用户上下文持有者
 * 使用ThreadLocal存储当前线程的用户信息
 */
public class UserContextHolder {
    
    private static final ThreadLocal<UserContext> CONTEXT_HOLDER = new ThreadLocal<>();
    
    /**
     * 设置用户上下文
     * @param userContext 用户上下文
     */
    public static void setContext(UserContext userContext) {
        CONTEXT_HOLDER.set(userContext);
    }
    
    /**
     * 获取用户上下文
     * @return 用户上下文
     */
    public static UserContext getContext() {
        return CONTEXT_HOLDER.get();
    }
    
    /**
     * 获取当前用户ID
     * @return 用户ID
     */
    public static Long getCurrentUserId() {
        UserContext context = getContext();
        return context != null ? context.getUserId() : null;
    }
    
    /**
     * 获取当前用户名
     * @return 用户名
     */
    public static String getCurrentUsername() {
        UserContext context = getContext();
        return context != null ? context.getUsername() : null;
    }
    
    /**
     * 检查是否有用户上下文
     * @return 是否有用户上下文
     */
    public static boolean hasContext() {
        return getContext() != null;
    }
    
    /**
     * 清除用户上下文
     */
    public static void clearContext() {
        CONTEXT_HOLDER.remove();
    }
    
    /**
     * 设置用户信息
     * @param userId 用户ID
     * @param username 用户名
     */
    public static void setUser(Long userId, String username) {
        setContext(new UserContext(userId, username));
    }
}
